/*
 * Copyright (C) 2005 Johan Maasing johan at zoom.nu Licensed under the Apache
 * License, Version 2.0 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
 * or agreed to in writing, software distributed under the License is
 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */
package nu.zoom.swing.desktop;

/**
 * Listener for workbench frame events.
 * 
 * @see nu.zoom.swing.desktop.WorkbenchFrame#addFrameListener(WorkbenchFrameListener)
 * @see nu.zoom.swing.desktop.WorkbenchFrame#removeFrameListener(WorkbenchFrameListener)
 */
public interface WorkbenchFrameListener {

    /**
     * Called when the frame has been closed and disposed. Can be used to free
     * resources that the GUI components have allocated (for example database
     * connections). This callback will be on the Swing/AWT EventQueue.
     *
     * @see javax.swing.JInternalFrame#dispose()
     * @param frame
     *            The frame that was disposed.
     */
    public void frameClosed(WorkbenchFrame frame);

    /**
     * Called when the frame is about to be disposed. Can for example be used to
     * save GUI state before the GUI components are destroyed. Clean up of other
     * resources are better handled by the frameClosed method. This callback
     * will be on the Swing/AWT EventQueue.
     *
     * @see javax.swing.JInternalFrame#dispose()
     * @param frame
     *            The frame that is about to be disposed.
     */
    public void frameWillDispose(WorkbenchFrame frame);

    /**
     * Called when the frame has been detached from the workbench. This callback
     * will be on the Swing/AWT EventQueue
     * @see WorkbenchFrame#detach()
     * @param frame The frame that has been detached.
     */
    public void frameDetached(WorkbenchFrame frame);

    /**
     * Called when the frame has been detached from the workbench. This callback
     * will be on the Swing/AWT EventQueue
     * @see WorkbenchFrame#detach()
     * @param frame The frame that has been detached.
     */
    public void frameAttached(WorkbenchFrame frame);
}
